package projorientado.application;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Calendar;
import java.util.Iterator;
import java.util.Vector;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import org.jdesktop.application.Action;
import org.jdesktop.application.Application;
import org.jdesktop.application.ApplicationActionMap;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.SingleFrameApplication;

public class MainViewTeste extends FrameView {

	private JPanel painelPrincipal;
	private JLabel placaCarro;
	private JLabel figuraPlaca;
	private JButton botaoCarregar;
	private JFileChooser selecionadorFoto;
	private ApplicationActionMap actionMap;
	private BufferedImage imagem;

	public MainViewTeste(SingleFrameApplication app) {
		super(app);
		this.initComponents();
	}

	private void initComponents() {
		this.painelPrincipal = new JPanel();
		
		this.selecionadorFoto = new JFileChooser();

		this.actionMap = Application.getInstance(projorientado.application.Main.class).
				getContext().getActionMap(MainViewTeste.class, this);

		this.botaoCarregar = new JButton("Carregar Foto");
		this.botaoCarregar.setAction(this.actionMap.get("carregaFoto"));

		this.placaCarro = new JLabel();
		this.figuraPlaca = new JLabel();

		this.painelPrincipal.add(placaCarro);
		this.painelPrincipal.add(figuraPlaca);
		this.painelPrincipal.add(botaoCarregar);

		this.setComponent(painelPrincipal);
	}

	@Action
	public void carregaFoto() {
		JFrame mainFrame = Main.getApplication().getMainFrame();
		int returnVal = selecionadorFoto.showDialog(mainFrame, "Abrir");
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			try {
				Reconhecedor reconhecedor = Reconhecedor.getInstance();
				imagem = ImageIO.read(selecionadorFoto.getSelectedFile());
				Vector<String> placas = reconhecedor.reconhecerPlacas(imagem);
				if (placas != null) {
					Iterator<String> i = placas.iterator();
					while (i.hasNext()) {
						tentarAcesso(i.next(), reconhecedor.getTempoDaUltimaLeitura());
					}
				}
			} catch (IOException e) {
				javax.swing.JOptionPane.showMessageDialog(mainFrame, "Erro ao carregar imagem.");
			} catch (NoPlatesFoundException e) {
				javax.swing.JOptionPane.showMessageDialog(mainFrame, "Não foram encontradas placas.");
			}
		}
	}

	private void tentarAcesso(String placa, long duracao) {
		this.placaCarro.setText(placa);
		this.figuraPlaca.setIcon(new ImageIcon(imagem));
	}

}
